package it.controllocredito.backend.phone.calllog;

import it.controllocredito.backend.persistence.bean.RegistroChiamate;

import java.sql.Time;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.BaseColumns;
import android.provider.CallLog;

public class CallLogHandler
{
	
	private static final String	log_class_name	= "CallLogHandler";
	
	private Cursor				cursor;
	
	private boolean[]			filtroTipoChiamata = {true,true,true,true};
	
	public CallLogHandler(ContentResolver contentResolver, String whereSql)
	{
		super();
		
		String[] parametriEstrazioneQuery = new String[]
		{ BaseColumns._ID, CallLog.Calls.NUMBER, CallLog.Calls.TYPE,
				CallLog.Calls.DURATION, CallLog.Calls.DATE };
		
		cursor = contentResolver.query(CallLog.Calls.CONTENT_URI,
				parametriEstrazioneQuery, whereSql, null,
				CallLog.Calls.DEFAULT_SORT_ORDER);
		
	}
	
	public CallLogHandler(ContentResolver contentResolver, String whereSql,
			boolean[] filtroTipoChiamata)
	{
		
		this(contentResolver, whereSql);
		
		this.filtroTipoChiamata = filtroTipoChiamata;
	}
	
	public ArrayList<RegistroChiamate> eseguiSelectRegistroChiamate()
	{
		
		ArrayList<RegistroChiamate> listaChiamate = new ArrayList<RegistroChiamate>();
		
		RegistroChiamate beanChiamata;
		
		String numeroTelefono;
		long durataChiamata;
		long dataChiamata;
		int tipoChiamata;
		
		if (cursor != null)
		{
			int numeroTelefonoColumn = cursor
					.getColumnIndex(CallLog.Calls.NUMBER);
			int tipoChiamataColumn = cursor.getColumnIndex(CallLog.Calls.TYPE);
			int durataChiamataColumn = cursor
					.getColumnIndex(CallLog.Calls.DURATION);
			int dataChiamataColumn = cursor.getColumnIndex(CallLog.Calls.DATE);
			
			while (cursor.moveToNext())
			{
				
				tipoChiamata = cursor.getInt(tipoChiamataColumn);
				
				if (filtroTypeCall(tipoChiamata, filtroTipoChiamata))
				{
					numeroTelefono = cursor.getString(numeroTelefonoColumn);
					durataChiamata = cursor.getLong(durataChiamataColumn);
					dataChiamata = cursor.getLong(dataChiamataColumn);
					tipoChiamata = cursor.getInt(tipoChiamataColumn);
					
					beanChiamata = new RegistroChiamate();
					
					beanChiamata.setNumeroTel(numeroTelefono);
					beanChiamata.setTipo(tipoChiamata);
					beanChiamata.setDurata(durataChiamata);
					
					Calendar data = new GregorianCalendar();
					data.setTime(new Date(dataChiamata));
		
					
					beanChiamata.setGiornoSettimana(data.get(Calendar.DAY_OF_WEEK));
					beanChiamata.setGiorno(data.get(Calendar.DAY_OF_MONTH));
					beanChiamata.setMese(data.get(Calendar.MONTH));
					beanChiamata.setAnno(data.get(Calendar.YEAR));
					beanChiamata.setOra(new Time(dataChiamata));
					
					
					listaChiamate.add(beanChiamata);
					
				}
			}
			cursor.close();
		}
		
		return listaChiamate;
	}
	
	private boolean filtroTypeCall(int type, boolean[] typeFiltre)
	{
		boolean risultatoFiltroOk = false;
		
		try
		{
			switch (type)
			{
			case CallLog.Calls.OUTGOING_TYPE: // 2
				risultatoFiltroOk = (typeFiltre[CallLog.Calls.OUTGOING_TYPE]);
			break;
			
			case CallLog.Calls.INCOMING_TYPE: // 1
				risultatoFiltroOk = (typeFiltre[CallLog.Calls.INCOMING_TYPE]);
			break;
			
			case CallLog.Calls.MISSED_TYPE: // 3
				risultatoFiltroOk = (typeFiltre[CallLog.Calls.MISSED_TYPE]);
			break;
			default:
				risultatoFiltroOk = (typeFiltre[0]);
			break;
			}
		} catch (NumberFormatException e)
		{
			risultatoFiltroOk = false;
			e.printStackTrace();
		}
		
		return risultatoFiltroOk;
	}
	
}